package com.wbk.lotterysystemuserservice.controller.admin.biz;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wbk.lotterysystemuserservice.entity.Store;
import com.wbk.lotterysystemuserservice.entity.User;
import com.wbk.lotterysystemuserservice.entity.UserExt;
import com.wbk.lotterysystemuserservice.service.StoreService;
import com.wbk.lotterysystemuserservice.service.UserExtInfoService;
import com.wbk.lotterysystemuserservice.service.UserInfoService;
import com.wbk.user.qo.StoreAuditQO;
import com.wbk.user.vo.StoreVO;
import com.wbk.system.feign.EmailFeign;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wbk.system.qo.StoreAuditResultQO;
import result.Result;

import java.util.List;

@Component
public class StoreBiz {

    @Autowired
    StoreService storeService;

    @Autowired
    UserInfoService userInfoService;

    @Autowired
    UserExtInfoService userExtInfoService;

    @Autowired
    EmailFeign emailFeign;

    public Result<PageInfo> storeList(int pageNum,int pageSize,int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<Store> stores = storeService.getAllStore();
        PageInfo pageInfo = new PageInfo(stores, navigatePages);
        return new Result<>(200, "审核通过的商家列表", pageInfo);
    }

    public Result<PageInfo> storeListWithoutAudit(int pageNum,int pageSize, int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<Store> stores = storeService.getAllStoreWithoutAudit();
        PageInfo pageInfo = new PageInfo(stores, navigatePages);
        return new Result<>(200, "待审核的商家列表", pageInfo);
    }

    public Result<StoreVO> storeDetail(Long storeUserNo) {
        Store store = storeService.getStoreByUserNo(storeUserNo);
        if (store == null) {
            return new Result<>(100, "找不到相商家信息", null);
        }
        StoreVO storeVO = new StoreVO();
        BeanUtils.copyProperties(store, storeVO);
        return new Result<>(200, "商家信息", storeVO);
    }

    public Result<StoreVO> storeAudit(StoreAuditQO storeAuditQO) {
        Store store = storeService.getStoreByUserNo(storeAuditQO.getStoreUserNo());
        if (store == null) {
            return new Result<>(100, "找不到相商家信息", null);
        }
        if(store.getAuditStatus()!=0){
            return new Result<>(100, "该商家已审核完毕，无需重复操作", null);
        }
        if (storeAuditQO.getAuditStatus() != 1 && storeAuditQO.getAuditStatus() != 2) {
            return new Result<>(100, "参数异常", null);
        }

        StoreVO storeVO = new StoreVO();
        StoreAuditResultQO storeAuditResultQO=new StoreAuditResultQO();
        User user = userInfoService.getUserByUserNo(storeAuditQO.getStoreUserNo());

        //审核不通过
        if (storeAuditQO.getAuditStatus() == 2) {
            //更新审核状态
            store.setAuditStatus((byte) 2);
            store.setAuditOpinion(storeAuditQO.getAuditOpinion());
            storeService.audit(store);

            //邮件通知
            storeAuditResultQO.setEmail(user.getEmail()).setAuditStatus(storeAuditQO.getAuditStatus()).setAuditOpinion(storeAuditQO.getAuditOpinion());
            emailFeign.storeAuditResult(storeAuditResultQO);

            BeanUtils.copyProperties(store, storeVO);
            return new Result<>(200, "审核不通过，请重新修改相关信息", storeVO);
        }

        //审核通过
        //更新用户信息表中的用户类型
        UserExt userExt = userExtInfoService.getUserExt(storeAuditQO.getStoreUserNo());
        userExt.setUserType((byte)1);
        userExtInfoService.update(userExt);

        //更新审核状态
        store.setAuditStatus((byte) 1);
        store.setAuditOpinion(storeAuditQO.getAuditOpinion());
        storeService.audit(store);

        //邮件通知
        storeAuditResultQO.setEmail(user.getEmail()).setAuditStatus(storeAuditQO.getAuditStatus()).setAuditOpinion(storeAuditQO.getAuditOpinion());
        emailFeign.storeAuditResult(storeAuditResultQO);

        BeanUtils.copyProperties(store, storeVO);
        return new Result<>(200, "审核通过", storeVO);
    }
}
